package manejador;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import persistencia.Conexion;
import entidad.Role;

import interfaz.IEntidad;
import interfaz.IManejador;

public class ManejadorDeRole implements IManejador {
	private Conexion conexion = null;
	private ResultSet rs = null;
	private PreparedStatement stmt = null;
	private static ManejadorDeRole instancia = null;
	private ArrayList<IEntidad> roles = null;
	private Role role = null;

	private ManejadorDeRole() {
		conexion = Conexion.getInstancia();
	}

	public static ManejadorDeRole getInstancia() {
		if (instancia == null) {
			instancia = new ManejadorDeRole();
		}
		return instancia;
	}

	@Override
	public int agregar(IEntidad entidad) {
		int fila = 0;
		role = (Role) entidad;
		String sql = "INSERT INTO sistema_informacion.role ( nombre_role, descripcion_role ) VALUES (?, ?);";
		stmt = conexion.hacerEnunciado(sql);
		try {
			stmt.setString(1, role.getNombre());
			stmt.setString(2, role.getDescripcion());
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return fila;
	}

	@Override
	public int eliminar(int id) {
		int fila = 0;
		String sql = "DELETE FROM sistema_informacion.role WHERE id_role = ? ;";
		stmt = conexion.hacerEnunciado(sql);
		try {
			stmt.setInt(1, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return fila;
	}

	@Override
	public List<IEntidad> getEntidad() {
		roles = new ArrayList<IEntidad>();
		String sql = "SELECT * FROM sistema_informacion.role;";
		stmt = conexion.hacerEnunciado(sql);
		rs = conexion.hacerConsulta(sql);
		try {
			while (rs.next()) {
				IEntidad role = new Role(rs.getInt("id_role"), rs
						.getString("nombre_role"), rs
						.getString("descripcion_role"));
				roles.add(role);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return roles;
	}

	@Override
	public IEntidad getEntidadPorId(int id) {
		String sql = "SELECT * FROM sistema_informacion.role WHERE id_role ="
				+ id;
		stmt = conexion.hacerEnunciado(sql);
		rs = conexion.hacerConsulta(sql);
		try {
			while (rs.next()) {
				role = new Role(rs.getInt("id_role"), rs
						.getString("nombre_role"), rs
						.getString("descripcion_role"));

			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return role;
	}

	@Override
	public int modificar(IEntidad entidad, int id) {
		int fila = 0;
		role = (Role) entidad;
		String sql = "UPDATE sistema_informacion.role SET nombre_role = ? , descripcion_role = ? WHERE id_role = ?;";
		stmt = conexion.hacerEnunciado(sql);
		try {
			stmt.setString(1, role.getNombre());
			stmt.setString(2, role.getDescripcion());
			stmt.setInt(3, id);
			fila = stmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return fila;
	}

	public int getUltimoID() {
		String sql = "SELECT id_role FROM role ORDER BY id_role DESC LIMIT 1 ";
		stmt = conexion.hacerEnunciado(sql);
		rs = conexion.hacerConsulta(sql);
		int idRole = 0;
		try {
			while (rs.next()) {
				idRole = rs.getInt("id_role");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return idRole;
	}

	public int getRoleID(String nombreRole) {
		String sql = "SELECT id_role FROM role WHERE nombre_role=" + "'"
				+ nombreRole + "'";
		stmt = conexion.hacerEnunciado(sql);
		rs = conexion.hacerConsulta(sql);

		int idRole = 0;
		try {
			while (rs.next()) {
				idRole = rs.getInt("id_role");
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return idRole;
	}

	@Override
	public int agregarEmpleadoConCelular(IEntidad entidad) {
		// TODO Auto-generated method stub
		return 0;
	}

}
